Fake
A Rust library for generating fake data.
Installation
Default:
[dependencies]
fake = "*"
If you want the date and time features from chrono:
[dependencies.fake]
version = "*"
features = ["chrono"]
If you want Http faker features:
[dependencies.fake]
version = "*"
features = ["http"]
Usage
#[macro_use]
extern crate fake;
fake!(Internet.free_email);
fake!(Company.name);
fake!(Name.name);
fake!(Name.name in zh_tw);
fn to_lowercase<S: Into<String>>(s: S) -> String {
s.into().to_lowercase()
}
fake!("{} - {}", [Name.name | to_lowercase], [expr fake!(Name.name).to_lowercase()]);
fake!("{} - {} - {}", [Name.name], [Name.name in zh_tw], [Number.number(10)]);
fake!(r#"{{"name": "{x}", "chinese_name": "{y}"}}"#, [y = Name.name in zh_tw], [x = Name.name]);
fake!(r#"http://{domain}.{domain_suffix}/user/{username}.png?size={size}x{size}"#,
[domain = Name.last_name | to_lowercase],
[domain_suffix = Internet.domain_suffix],
[username = Name.first_name | to_lowercase],
[size = expr [512, 256, 128][gen_range(0, 3)]]);
use fake::faker::*;
Faker::free_email();
<Faker as Company>::name();
<Faker as Name>::name();
use fake::locales::zh_tw;
println!("{}", <zh_tw::Faker as Name>::name());
Lorem
println!("{:?}", fake!(Lorem.word));
println!("{:?}", fake!(Lorem.words(10)));
println!("{:?}", fake!(Lorem.sentence(4, 6)));
println!("{:?}", fake!(Lorem.sentences(10)));
println!("{:?}", fake!(Lorem.paragraph(7, 3)));
println!("{:?}", fake!(Lorem.paragraphs(3)));
Name
println!("{:?}", fake!(Name.first_name));
println!("{:?}", fake!(Name.last_name));
println!("{:?}", fake!(Name.name));
println!("{:?}", fake!(Name.name_with_middle));
println!("{:?}", fake!(Name.title_descriptor));
println!("{:?}", fake!(Name.title_level));
println!("{:?}", fake!(Name.title_job));
println!("{:?}", fake!(Name.title));
println!("{}", fake!(Name.first_name in zh_tw));
println!("{}", fake!(Name.last_name in zh_tw));
println!("{}", fake!(Name.name in zh_tw));
Number
println!("{:?}", fake!(Number.digit));
println!("{:?}", fake!(Number.number(10)));
println!("{:?}", fake!(Number.between(5, 10)));
println!("{:?}", fake!(Number.between(5.0_f32, 10.0_f32)));
Boolean
println!("{:?}", fake!(Boolean.boolean));
Internet
println!("{:?}", fake!(Internet.free_email_provider));
println!("{:?}", fake!(Internet.domain_suffix));
println!("{:?}", fake!(Internet.user_name));
println!("{:?}", fake!(Internet.free_email));
println!("{:?}", fake!(Internet.safe_email));
println!("{:?}", fake!(Internet.ip));
println!("{:?}", fake!(Internet.ipv4));
println!("{:?}", fake!(Internet.ipv6));
println!("{:?}", fake!(Internet.color));
println!("{:?}", fake!(Internet.user_agent);
HTTP
println!("{:?}", fake!(Http.status_code));
println!("{:?}", fake!(Http.status_code).canonical_reason());
println!("{:?}", fake!(Http.all_status_code));
println!("{:?}", fake!(Http.all_status_code).canonical_reason());
use http;
println!("{:?}", http::StatusCode::dummy());
println!("{:?}", dummy!(http::StatusCode));
println!("{:?}", dummy!(Vec<http::StatusCode>));
Company
println!("{:?}", fake!(Company.suffix));
println!("{:?}", fake!(Company.name));
println!("{:?}", fake!(Company.buzzword));
println!("{:?}", fake!(Company.catch_phase));
println!("{:?}", fake!(Company.bs));
println!("{:?}", fake!(Company.profession));
println!("{:?}", fake!(Company.industry));
Address
println!("{:?}", fake!(Address.time_zone));
println!("{:?}", fake!(Address.city_prefix));
println!("{:?}", fake!(Address.city_suffix));
println!("{:?}", fake!(Address.street_suffix));
println!("{:?}", fake!(Address.state));
println!("{:?}", fake!(Address.state_abbr));
println!("{:?}", fake!(Address.city));
println!("{:?}", fake!(Address.street_name));
println!("{:?}", fake!(Address.building_number));
println!("{:?}", fake!(Address.street_address));
println!("{:?}", fake!(Address.secondary_address));
println!("{:?}", fake!(Address.zip));
println!("{:?}", fake!(Address.postcode));
println!("{:?}", fake!(Address.latitude));
println!("{:?}", fake!(Address.longitude));
Phone Number
println!("{:?}", fake!(PhoneNumber.phone_number));
println!("{:?}", fake!(PhoneNumber.phone_number_with_format("N###-####")));
println!("{:?}", fake!(PhoneNumber.cell_number));
Date/Time
use chrono::prelude::*;
let early = Utc.ymd(2010, 4, 20).and_hms(11, 11, 11);
let late = Utc.ymd(2020, 6, 5).and_hms(9, 32, 33);
let now = Utc::now();
let fmt = "%a %b %e %T %Y %:z";
let now_str = now.format(fmt).to_string();
println!("{:?}", fake!(Chrono.time(Some("%I.%M.%S %p")));
println!("{:?}", fake!(Chrono.date(Some("%A %Y.%m.%d")));
println!("{:?}", fake!(Chrono.datetime(None)));
println!("{:?}", fake!(Chrono.before(Some(fmt), now_str)));
println!("{:?}", fake!(Chrono.after(Some(fmt), now_str)));
println!(
"{:?}",
fake!(Chrono.between(
Some(fmt),
&early.format(fmt).to_string(),
&late.format(fmt).to_string()
))
);
println!(
"{:?}",
fake!(
Chrono.between(
None,
&early.to_rfc3339(),
&late.to_rfc3339()
)
)
);
Dummy
println!("{:?}", dummy!(i32));
println!("{:?}", dummy!(Vec<Vec<i32>>));
Contributing
What can you help
- Add locales
- Add new faker
- Report bugs
- Fix Issues
How
- Fork the repo.
- Add a test for your change.
- Make the test.
cargo test
- Push to your fork and submit a pull request.
LICENSE
The MIT License (MIT)